/*
 * @Author: Await
 * @Date: 2025-05-07 12:00:00
 * @LastEditors: Await
 * @LastEditTime: 2025-05-07 12:00:00
 * @Description: 主题管理钩子，确保主题在应用级别正确应用
 */

import { useState, useEffect } from 'react';
import { ThemeConfig } from '../types/chartTypes';
import echarts from '../utils/echartsInit';

export interface UseThemeResult {
  /**
   * 设置当前主题
   * @param theme 主题配置或主题名称
   */
  setTheme: (theme: ThemeConfig | string) => void;
  /**
   * 当前主题名称
   */
  currentThemeName: string;
  /**
   * 重置为默认主题
   */
  resetTheme: () => void;
  /**
   * 注册一个新主题
   * @param name 主题名称
   * @param theme 主题配置
   */
  registerTheme: (name: string, theme: ThemeConfig) => void;
  /**
   * 获取所有已注册主题的名称
   */
  getRegisteredThemes: () => string[];
}

/**
 * 主题管理钩子，用于集中管理ECharts主题
 * @param defaultTheme 默认主题配置或名称
 */
export function useTheme(defaultTheme: ThemeConfig | string = 'default'): UseThemeResult {
  const [currentTheme, setCurrentTheme] = useState<string>(
    typeof defaultTheme === 'string' ? defaultTheme : 'default'
  );

  // 初始化时，如果传入的是主题配置对象，注册它
  useEffect(() => {
    if (typeof defaultTheme === 'object') {
      const themeName = defaultTheme.themeName || 'default';
      registerThemeInternal(themeName, defaultTheme);
      setCurrentTheme(themeName);
    }
  }, []);

  // 内部注册主题的函数，确保主题正确注册
  const registerThemeInternal = (name: string, theme: ThemeConfig) => {
    try {
      // 确保主题配置包含必要属性
      const completeTheme = {
        // 确保以下关键属性已设置，如果没有则使用默认值
        backgroundColor: theme.backgroundColor || '#ffffff',
        color: theme.color || ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],
        textStyle: theme.textStyle || { color: '#333333' },
        // 其他属性
        ...theme,
        // 确保有主题名称
        themeName: name
      };

      // 注册主题
      echarts.registerTheme(name, completeTheme);
      
      console.log(`[useTheme] 主题 "${name}" 已注册`, completeTheme);
      return true;
    } catch (error) {
      console.error(`[useTheme] 注册主题 "${name}" 失败:`, error);
      return false;
    }
  };

  // 设置当前主题
  const setTheme = (theme: ThemeConfig | string) => {
    if (typeof theme === 'string') {
      // 如果是字符串，直接使用该主题名称
      setCurrentTheme(theme);
    } else {
      // 如果是对象，注册并使用该主题
      const themeName = theme.themeName || `theme_${Date.now()}`;
      if (registerThemeInternal(themeName, theme)) {
        setCurrentTheme(themeName);
      }
    }
  };

  // 重置为默认主题
  const resetTheme = () => {
    setCurrentTheme('default');
  };

  // 获取所有已注册主题 - 由于echarts API限制，无法可靠地获取所有主题
  const getRegisteredThemes = (): string[] => {
    try {
      // 尝试获取内部_themes对象，但这是非公开API，可能会变化
      const themes = (echarts as any)._themes;
      return themes ? Object.keys(themes) : [];
    } catch (error) {
      console.error('[useTheme] 获取已注册主题列表失败:', error);
      return [];
    }
  };

  return {
    setTheme,
    currentThemeName: currentTheme,
    resetTheme,
    registerTheme: registerThemeInternal,
    getRegisteredThemes
  };
}

export default useTheme;